}
let user_configs = try!(config::all_configs(os::getcwd()));
- let override_ids = try!(source_ids_from_config(&user_configs));
+ let override_ids = try!(source_ids_from_config(&user_configs,
+ manifest_path.dir_path()));
let source_ids = package.get_source_ids();
let (packages, resolve) = {
Ok(test_executables)
}
-fn source_ids_from_config(configs: &HashMap<String, config::ConfigValue>)
- -> CargoResult<Vec<SourceId>> {
+fn source_ids_from_config(configs: &HashMap<String, config::ConfigValue>,
+ cur_path: Path) -> CargoResult<Vec<SourceId>> {
debug!("loaded config; configs={}", configs);
let config_paths = configs.find_equiv(&"paths").map(|v| v.clone());
internal("invalid configuration for the key `path`")
}));
- Ok(paths.iter().map(|p| SourceId::for_path(&Path::new(p.as_slice()))).collect())
+ // Make sure we don't override the local package, even if it's in the list
+ // of override paths
+ Ok(paths.iter().filter(|p| {
+ cur_path != os::make_absolute(&Path::new(p.as_slice()))
+ }).map(|p| {
+ SourceId::for_path(&Path::new(p.as_slice()))
+ }).collect())
}
fn scrape_target_config(config: &mut Config,
p.root().join_many(&["src", "bar"]).display())));
})
+
+test!(override_self {
+ let bar = project("bar")
+ .file("Cargo.toml", r#"
+ [package]
+
+ name = "bar"
+ version = "0.5.0"
+ authors = ["wycats@example.com"]
+ "#)
+ .file("src/lib.rs", "");
+
+ let p = project("foo");
+ let root = p.root().clone();
+ let p = p
+ .file(".cargo/config", format!(r#"
+ paths = ['{}']
+ "#, root.display()))
+ .file("Cargo.toml", format!(r#"
+ [package]
+
+ name = "foo"
+ version = "0.5.0"
+ authors = ["wycats@example.com"]
+
+ [dependencies.bar]
+ path = '{}'
+
+ "#, bar.root().display()))
+ .file("src/lib.rs", "")
+ .file("src/main.rs", "fn main() {}");
+
+ bar.build();
+ assert_that(p.cargo_process("cargo-build"), execs().with_status(0));
+
+})